home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / interfaces3_5.lha / Interfaces / Workbench.mod < prev   
Text File  |  1994-03-05  |  9KB  |  235 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: Workbench.mod 40.15 (3.1.94) Oberon 3.1
  5. **
  6. **   © 1993 by Fridtjof Siebert
  7. **   updated for V39, V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE Workbench;
  12.  
  13. IMPORT e   * := Exec,
  14.        I   * := Intuition,
  15.        d   * := Dos,
  16.        u   * := Utility,
  17.        sys * := SYSTEM;
  18.  
  19.  
  20. TYPE
  21.  
  22.   WBArgPtr * = UNTRACED POINTER TO WBArg;
  23.   WBArg * = STRUCT
  24.     lock * : d.FileLockPtr;     (* a lock descriptor *)
  25.     name * : e.LSTRPTR;         (* a string relative to that lock *)
  26.   END;
  27.  
  28.   WBArguments * = ARRAY MAX(LONGINT) DIV SIZE(WBArg) -1 OF WBArg;
  29.   WBArgumentsPtr * = UNTRACED POINTER TO WBArguments;
  30.  
  31.   WBStartupPtr * = UNTRACED POINTER TO WBStartup;
  32.   WBStartup * = STRUCT (message * : e.Message) (* a standard message structure *)
  33.     process * : d.ProcessId;     (* the process descriptor for you *)
  34.     segment * : e.BPTR;          (* a descriptor for your code *)
  35.     numArgs * : LONGINT;         (* the number of elements in ArgList *)
  36.     toolWindow * : e.LSTRPTR;    (* description of window *)
  37.     argList * : WBArgumentsPtr;  (* the arguments themselves *)
  38.   END;
  39.  
  40. CONST
  41.  
  42.   disk      * = 1;
  43.   drawer    * = 2;
  44.   tool      * = 3;
  45.   project   * = 4;
  46.   garbage   * = 5;
  47.   device    * = 6;
  48.   kick      * = 7;
  49.   wbAppIcon * = 8;
  50.  
  51. TYPE
  52.  
  53.   OldDrawerDataPtr * = UNTRACED POINTER TO OldDrawerData;
  54.   OldDrawerData * = STRUCT       (* pre V36 definition *)
  55.    (newWindow * : I.NewWindow)   (* args to open window *)
  56.     currentX  * : LONGINT;       (* current x coordinate of origin *)
  57.     currentY  * : LONGINT;       (* current y coordinate of origin *)
  58.   END;
  59.  
  60. CONST
  61.  
  62. (* the amount of DrawerData actually written to disk *)
  63.   oldDrawerDataFileSize * = sys.SIZE(OldDrawerData);
  64.  
  65. TYPE
  66.  
  67.   DrawerDataPtr * = UNTRACED POINTER TO DrawerData;
  68.   DrawerData * = STRUCT (newWindow * : I.NewWindow) (* args to open window *)
  69.     currentX * : LONGINT;        (* current x coordinate of origin *)
  70.     currentY * : LONGINT;        (* current y coordinate of origin *)
  71.     flags * : LONGSET;           (* flags for drawer *)
  72.     viewModes * : SET;           (* view mode for drawer *)
  73.   END;
  74.  
  75. CONST
  76.  
  77. (* the amount of DrawerData actually written to disk *)
  78.   drawerDataFileSize * = sys.SIZE(DrawerData);
  79.  
  80. TYPE
  81.  
  82.   DiskObjectPtr * = UNTRACED POINTER TO DiskObject;
  83.   DiskObject * = STRUCT
  84.     magic * : INTEGER; (* a magic number at the start of the file *)
  85.     version * : INTEGER; (* a version number, so we can change it *)
  86.     gadget * : I.Gadget;      (* a copy of in core gadget *)
  87.     type * : SHORTINT;
  88.     defaultTool * : e.LSTRPTR;
  89.     toolTypes * : e.APTR;
  90.     currentX * : LONGINT;
  91.     currentY * : LONGINT;
  92.     drawerData * : DrawerDataPtr;
  93.     toolWindow * : e.LSTRPTR; (* only applies to tools *)
  94.     stackSize * : LONGINT;    (* only applies to tools *)
  95.   END;
  96.  
  97. CONST
  98.   
  99.   diskMagic    * = 0E310U;  (* a magic number, not easily impersonated *)
  100.   diskVersion  * = 1;       (* our current version number *)
  101.   diskRevision * = 1;       (* our current revision number *)
  102. (* I only use the lower 8 bits of Gadget.userData for the revision # *)
  103.   diskRevisionMask * = 0FFH;
  104.  
  105. TYPE
  106.  
  107.   FreeListPtr * = UNTRACED POINTER TO FreeList;
  108.   FreeList * = STRUCT
  109.     numFree * : INTEGER;
  110.     memList * : e.List;
  111.   END;
  112.  
  113. CONST
  114.  
  115. (* each message that comes into the WorkBenchPort must have a type field
  116. ** in the preceeding short.  These are the defines for this type
  117. *)
  118.  
  119.   appWindow     * = 7;      (* msg from an app window *)
  120.   appIcon       * = 8;      (* msg from an app icon *)
  121.   appMenuItem   * = 9;      (* msg from an app menuitem *)
  122.  
  123. (* workbench does different complement modes for its gadgets.
  124. ** It supports separate images, complement mode, and backfill mode.
  125. ** The first two are identical to intuitions GFLG_GADGIMAGE and GFLG_GADGHCOMP.
  126. ** backfill is similar to GFLG_GADGHCOMP, but the region outside of the
  127. ** image (which normally would be color three when complemented)
  128. ** is flood-filled to color zero.
  129. *)
  130.   gadgBackFill * = {0};
  131.  
  132. (* if an icon does not really live anywhere, set its current position
  133. ** to here
  134. *)
  135.   noIconPosition * = 80000000H;
  136.  
  137. (* workbench now is a library.  this is it's name *)
  138.   workbenchName * = "workbench.library";
  139.  
  140. (* If you find AppMessage.Version >= amVersion, you know this structure has
  141.  * at least the fields defined in this version of the include file
  142.  *)
  143.   amVersion * = 1;
  144.  
  145. TYPE
  146.  
  147.   AppMessagePtr * = UNTRACED POINTER TO AppMessage;
  148.   AppMessage * = STRUCT (message * : e.Message) (* standard message structure *)
  149.     type * : INTEGER;             (* message type               *)
  150.     userData * : LONGINT;         (* application specific       *)
  151.     id * : LONGINT;               (* application definable ID   *)
  152.     numArgs * : LONGINT;          (* # of elements in arglist   *)
  153.     argList * : WBArgumentsPtr;   (* the arguements themselves  *)
  154.     version * : INTEGER;          (* will be AM_VERSION         *)
  155.     class * : SET;                (* message class              *)
  156.     mouseX * : INTEGER;           (* mouse x position of event  *)
  157.     mouseY * : INTEGER;           (* mouse y position of event  *)
  158.     seconds * : LONGINT;          (* current system clock time  *)
  159.     micros * : LONGINT;           (* current system clock time  *)
  160.     reserved * : ARRAY 8 OF LONGINT;    (* avoid recompilation  *)
  161.   END;
  162.  
  163. (*
  164.  * The following structures are private.  These are just stub
  165.  * structures for code compatibility...
  166.  *)
  167.  
  168.   AppWindowPtr * = UNTRACED POINTER TO STRUCT END;
  169.   AppIconPtr * = UNTRACED POINTER TO STRUCT END;
  170.   AppMenuItemPtr * = UNTRACED POINTER TO STRUCT END;
  171.  
  172. VAR
  173.   base * : e.LibraryPtr;
  174.  
  175. (* --- functions in V36 or higher (Release 2.0) --- *)
  176. (* --- REMEMBER: You have to ensure that Workbench.base#NIL    --- *)
  177. (* ---           BEFORE you use the following Prozedures!      --- *)
  178. PROCEDURE StartWorkbench   *{base,- 42}(flags{0}      : LONGSET;
  179.                                         ptr{1}        : LONGINT): BOOLEAN;
  180. PROCEDURE AddAppWindowA    *{base,- 48}(id{0}         : LONGINT;
  181.                                         userdata{1}   : LONGINT;
  182.                                         window{8}     : I.WindowPtr;
  183.                                         msgport{9}    : e.MsgPortPtr;
  184.                                         taglist{10}   : ARRAY OF u.TagItem): AppWindowPtr;
  185. PROCEDURE AddAppWindow     *{base,- 48}(id{0}         : LONGINT;
  186.                                         userdata{1}   : LONGINT;
  187.                                         window{8}     : I.WindowPtr;
  188.                                         msgport{9}    : e.MsgPortPtr;
  189.                                         tag1{10}..    : u.Tag): AppWindowPtr;
  190. PROCEDURE RemoveAppWindow  *{base,- 54}(appWindow{8}  : AppWindowPtr): BOOLEAN;
  191. PROCEDURE AddAppIconA      *{base,- 60}(id{0}         : LONGINT;
  192.                                         userdata{1}   : LONGINT;
  193.                                         text{8}       : ARRAY OF CHAR;
  194.                                         msgprot{9}    : e.MsgPortPtr;
  195.                                         lock{10}      : d.FileLockPtr;
  196.                                         diskobj{11}   : DiskObjectPtr;
  197.                                         taglist{12}   : ARRAY OF u.TagItem): AppIconPtr;
  198. PROCEDURE AddAppIcon       *{base,- 60}(id{0}         : LONGINT;
  199.                                         userdata{1}   : LONGINT;
  200.                                         text{8}       : ARRAY OF CHAR;
  201.                                         msgprot{9}    : e.MsgPortPtr;
  202.                                         lock{10}      : d.FileLockPtr;
  203.                                         diskobj{11}   : DiskObjectPtr;
  204.                                         tag1{12}..    : u.Tag): AppIconPtr;
  205. PROCEDURE RemoveAppIcon    *{base,- 66}(appIcon{8}    : AppIconPtr): BOOLEAN;
  206. PROCEDURE AddAppMenuItemA  *{base,- 72}(id{0}         : LONGINT;
  207.                                         userData{1}   : LONGINT;
  208.                                         text{8}       : ARRAY OF CHAR;
  209.                                         msgprot{9}    : e.MsgPortPtr;
  210.                                         taglist{10}   : ARRAY OF u.TagItem): AppMenuItemPtr;
  211. PROCEDURE AddAppMenuItem   *{base,- 72}(id{0}         : LONGINT;
  212.                                         userData{1}   : LONGINT;
  213.                                         text{8}       : ARRAY OF CHAR;
  214.                                         msgprot{9}    : e.MsgPortPtr;
  215.                                         tag1{10}..    : u.Tag): AppMenuItemPtr;
  216. PROCEDURE RemoveAppMenuItem*{base,- 78}(appMenuItem{8}: AppMenuItemPtr): BOOLEAN;
  217.  
  218. (*--- functions in V39 or higher (Release 3) ---*)
  219.  
  220. PROCEDURE WBInfo           *{base,-05AH}(lock{8}      : d.FileLockPtr;
  221.                                          name{9}      : ARRAY OF CHAR;
  222.                                          screen{10}   : I.ScreenPtr);
  223.  
  224.  
  225. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  226.  
  227. BEGIN
  228.   base :=  e.OpenLibrary(workbenchName,37);
  229.  
  230. CLOSE
  231.   IF base#NIL THEN e.CloseLibrary(base) END;
  232.  
  233. END Workbench.
  234.  
  235.